#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
using namespace std;

FILE* _file;
int midaKB;

void zeros();
void uniDos();
void alfabet();
void ajuda();

int main(int argc, char *argv[])
{
	if(argc==4){
		//Preparem l'arxiu i obtenim la mida
		_file = fopen(argv[1], "wb");
		midaKB = atoi(argv[2]);
		//Formatejem, segons l'opcio escullida
		if(strcmp(argv[3],"-zeros")==0) zeros();
		else if (strcmp(argv[3],"-unidos")==0) uniDos();
		else if (strcmp(argv[3],"-alfabet")==0) alfabet();
		else ajuda();
	}
	else ajuda();
	//Tanquem l'arxiu
	fclose (_file);
}


//Formateja inserint caracters nuls.
void zeros()
{
    char buf[1024];
    for (int i = 0; i < 1024; i++) buf[i] = NULL;
    for (int i = 0; i < midaKB; i++) fwrite(buf, 1024, 1, _file);
    cout << "zeros..." << endl;
}


//Formateja inserint uns i dossos alternativament.
void uniDos()
{
    char buf0[1024];
    for (int i = 0; i < 1024; i++) buf0[i] = 0;
    char buf1[1024];
    for (int i = 0; i < 1024; i++) buf1[i] = 1;

    bool par;

    for (int i = 0; i < midaKB; i++)
    {
        par = ((i%2) == 0) ? true : false;
        if(par)
            fwrite(buf0, 1024, 1, _file);
        else
            fwrite(buf1, 1024, 1, _file);
    }
    cout << "unidos..." << endl;
}


//Formateja inserint una lletra diferent per cada pagina.
void alfabet()
{
    char buf[1024];
    char car = 'a';
    int offset = 0;
    for (int i = 0; i < midaKB; i++)
    {
    	//Generem el buffer amb el caracter que pertoca.
    	for (int i = 0; i < 1024; i++) buf[i] = car+offset;
    	//Si arribem a la 'z', tornem a la 'a'
    	if (offset < 25) offset++; else offset = 0;
    	//Copiem el buffer al disc.
    	fwrite(buf, 1024, 1, _file);
    }
    cout << "alfabet..." << endl;
}


//Mostra informacio sobre els parametres d'execucio
void ajuda()
{
	cout << endl;
	cout << "FBDA Crear Disc - Parametres:" << endl;
	cout << "CreateDisk [nom_fitxer] [mida en KB] -zeros    (tot caracters nuls)" << endl;
	cout << "CreateDisk [nom_fitxer] [mida en KB] -unidos   (pags parells: 1 i senars: 2)" << endl;
	cout << "CreateDisk [nom_fitxer] [mida en KB] -alfabet  (una lletra per pagina)" << endl;
}

